#!/bin/bash 

args=(
	
  # 必须使用e1000 网卡，不然网络能ping通，但是VRM无法添加CNA
  # 并且第一个网口必须得是管理网口  
  -device e1000,netdev=net0,mac=aa:51:00:00:01:00 \
  -netdev tap,id=net0,ifname=hci1_manage,script="./Huawei_fusion_compute_qemu_script/add_to_manage_bridge.sh" \
  -device e1000,netdev=net1,mac=aa:51:00:00:01:01 \
  -netdev tap,id=net1,ifname=hci1_storage,script="./Huawei_fusion_compute_qemu_script/add_to_business_bridge.sh" \

  -device e1000,netdev=net2,mac=aa:51:00:00:01:02 \
  -netdev tap,id=net2,ifname=hci1_2,script=no \

  -device e1000,netdev=net3,mac=aa:51:00:00:01:03 \
  -netdev tap,id=net3,ifname=hci1_3,script=no \
  -device e1000,netdev=net4,mac=aa:51:00:00:01:04 \
  -netdev tap,id=net4,ifname=hci1_4,script=no 

  -device e1000,netdev=n1 \
  -netdev user,id=n1,hostfwd=tcp::2222-:22,hostfwd=tcp::18888-:80,hostfwd=tcp::443-:443 \


  # 物理内存不够的场景下，可以调大宿主机的swap分区内存	  
  -m 32G \
 # -object memory-backend-ram,id=ram0,size=24G,prealloc=off,share=on \
 # -machine memory-backend=ram0,accel=kvm \
 # -mem-path /dev/shm \      # 用 tmpfs，避免 COW
)
qemu-system-x86_64 \
  -enable-kvm \
  -cpu host \
  -smp 4 \
  -machine q35,accel=kvm \
  -drive file=./firmware_sangfor_hci/hci.qcow2,if=virtio \
  -vnc 0.0.0.0:30,password=off \
  -daemonize \
  -cdrom ./firmware_sangfor_hci/HCI6.10.0_R2_X86_20240911_.iso \
  -smbios "type=1,manufacturer=HP,product=ProLiant DL380 G7,serial=CNG12345,uuid=11111111-2222-3333-4444-555555555555" \
  ${args[@]}





# 把宿主机 swap 分区（或 swap 文件）加大，确实能让 QEMU 成功拿到 24 GB、28 GB 甚至 32 GB 的 虚拟地址空间，但 guest 里一旦真把内存用满，就会以 swap-in/out 的形式表现出来——宿主机磁盘狂闪、guest 内部卡顿到几乎不可用，严重时 KVM 自己会触发 IO 阻塞，把宿主机一起拖死。下面把“能跑起来”和“跑得好”分开说清楚。

#只改 swap 就能启动的原理
#Linux 的匿名页分配是“延迟提交”(lazy allocate)。
#QEMU 带 -m 24G 时，内核只登记 24 GB 的 虚拟区（mmap），物理页真正用到才分配；
#如果物理 RAM 不够，会把冷页换到 swap；
#只要 RAM + swap ≥ guest 声明量，启动就不会报 Cannot allocate memory。
#快速操作步骤（举例加到 32 GB swap）
#bash
#Copy
# 1. 生成 16 GB 新 swap 文件（原 swap 8 GB 的话，总 swap ≈ 24 GB）
#sudo dd if=/dev/zero of=/swapfile-qemu bs=1M count=16384
#sudo chmod 600 /swapfile-qemu
#sudo mkswap /swapfile-qemu
#sudo swapon /swapfile-qemu

# 2. 永久生效
#echo "/swapfile-qemu swap swap defaults 0 0" | sudo tee -a /etc/fstab

# 3. 调低 swap 占用倾向，避免一启动就狂换
#echo 10 | sudo tee /proc/sys/vm/swappiness   # 安装阶段可再降到 1
